/*
 * Hlavni.c
 *
 *  Created on: 6.11.2012
 *      Author: Z183797
 */
#include <stdio.h>
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
//Lokalni header
#include "Hlavni.h"
#include "UART.h"
#include "data.h"

char prijaty_znak;
ISR(USART_RXC_vect) {
	if (flag == 1) {
		nactiData(UDR );
	} else if ((flag == 0) && (valid_Data(UDR ))) {
		flag = 1;
		//cli();          // Vypnout globalne interrupty / otazka zda stale zapinat vzpinat??
	}

}

int main(void) {
	STATE stav;
	stav = INIT;		// Po startu programu musi jako prvni probehnout INIT

	while (1) {
		switch (stav) {
			case INIT:
				inicialiazace();
				break;
			case PROBLEM:
			// Prip. selhani initu atd.
				break;
			case ALARM:
			//Generace alarmu;
				break;
			case DATA:
				if ((ptr_reference->platnost == PLATNA_DATA)
					&& (ptr_aktualni == PLATNA_DATA))
				{
					porovnejPolohy();
				}
				break;
			case DATA_NEPLATNA:
			default:
				break;
		}
	}

}

STATE inicialiazce()
{
	init_Ports();
	init_UART();
	sei();
	//<! Global interrupt
	ptr_reference = &pozice[0];      //<! Pointer na referncni polohu
	ptr_aktualni = &pozice[1];           //<! Pointer na aktualni polohu
	return NEPLATNA_DATA;
}

/////////////////////////////
//! Funkce: set_Ports      //
//! Inicializace portu     //
/////////////////////////////
void init_Ports() {
	DDRB |= (1 << PB0);           //<! Aktivovani pinu PB0
	PORTB = (1 << PB0);            //<! Nastaveni do vysoke urovne
}

/////////////////////////////
//! Funkce: blik_LED       //
//! Blikani LED diodou     //
/////////////////////////////
void blik_LED() {
	PORTB = (0 << PB0);
	_delay_ms(1000);
	PORTB = (1 << PB0);
	_delay_ms(1000);
}
/////////////////////////////
//! Funkce: Interrupt       //
//! Blikani Interrupt UART  //
/////////////////////////////

